object Demo06CaseClass {
  def main(args: Array[String]): Unit = {
    val stu01: Stu = new Stu("001", "王五", 21, "男", "理科三班")
    val stu02: Stu = Stu("002", "王五2", 22, "男", "理科三班")

    // 虽然看起来像是直接获取对象的属性
    // 实际上是调用了一个跟属性名相同的方法
    println(stu01.age)
    println(stu01.id)
    println(stu01.name)

    println(stu01.id)
    println(stu01.name)
    println(stu01.age)

    stu01.id = "003"

    println(stu01)
  }
}

// 样例类

/**
 * 在编译时
 * 1、会默认给每一个属性加上get方法
 * 2、所有定义好的属性默认由val修饰即不能够修改，
 * 如果需要对属性从新修改则需要用var修饰
 * 3、默认会实现序列化接口，可以将样例类的对象进行网络传输
 * 4、样例类会重写toString方法 打印时会将所有的属性打印出来
 */
case class Stu(var id: String, name: String, age: Int, gender: String, clazz: String)
